package com.chebaohui.iqs.service.impl.deal.bihu.profess;
/**
 * 处理车型不一致
 * @author Administrator
 *
 */

import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;
import com.alibaba.fastjson.JSONObject;
import com.chebaohui.iqs.entity.base.Cars;
import com.chebaohui.iqs.entity.req.CheckCar;
import com.chebaohui.iqs.entity.req.LastYearPolicyReq;
import com.chebaohui.iqs.entity.res.CompanyCars;
import com.chebaohui.iqs.service.impl.deal.util.CompanyUtil;

public class BiHuRenewal {
	/**
	 * log:日志输出
	 */
	private  Log log = LogFactory.getLog(BiHuRenewal.class);

	private JSONObject carJson;

	private Set<Double> li_c;

	private void sixDeal(CheckCar dealParm) throws Exception{
		LastYearPolicyReq param=new LastYearPolicyReq();
		param.setLicenceNo(dealParm.getLicense().getLicenceNo());
		param.setEngineNo(dealParm.getLicense().getEngineNo());
		param.setFrameNo(dealParm.getLicense().getFrameNo());
		String org=JSONObject.toJSONString(new BiHuPolicyCheck().policy(param).getData().getCar());
		this.carJson=JSONObject.parseObject(org);
		this.li_c=new HashSet<>();

	}

	/**
	 * 处理车型不一致
	 * @param param
	 * @return
	 * @throws Exception 
	 */
	public void bihuiRenewalCar(List<CompanyCars<List<Cars>>> param ,CheckCar cParam) throws Exception{
		boolean isAllSuccess=false;

		for(CompanyCars<List<Cars>> carParam : param){
			JSONObject res = JSONObject.parseObject(JSONObject.toJSONString(carParam));
			//成功查询出来车辆信息的保险公司进行匹配最合适的车
			if(res.getString("code").trim().equals("000") && res.getString("msg").trim().equals("成功")){
				isAllSuccess=true;//是否有成功车型
			}
		}

		if(!dealP(cParam) || !isAllSuccess){//判断是否需要调用续保查询接口
			log.info("行驶证信息不完善 或者 无车型，无法调用续保查询接口匹配。。。 ");
			return ;
		}
		log.info("行驶证信息完善，开始调用续保查询接口获取往年投保车型...");

		sixDeal(cParam);//续保信息查询并处理


		for(CompanyCars<List<Cars>> carParam : param){
			JSONObject res = JSONObject.parseObject(JSONObject.toJSONString(carParam));
			//成功查询出来车辆信息的保险公司进行匹配最合适的车
			if(res.getString("code").trim().equals("000") && res.getString("msg").trim().equals("成功")){
				carCompanyDeal(carParam.getCars());
			}
		}


		/*SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
		long minday=new Date().getTime()-sdf.parse(cParam.getLicense().getRegisteredTime()).getTime();
		long day=minday/(1000*60*60*24);

		if( day>=365){
			sixDeal(cParam);//续保信息用车牌查询并处理
		}else{
			sixDeal(cParam);//续保信息用车架号和发动机号查询并处理
		}

		if( day>=365){

			if(!CompanyUtil.valLicenceNo(cParam.getLicense().getLicenceNo())){
				if(!StringUtil.isNulls(cParam.getLicense().getFrameNo()) && !CompanyUtil.valFrameNo(cParam.getLicense().getFrameNo()))
					return;
				if(!StringUtil.isNulls(cParam.getLicense().getEngineNo()) && !CompanyUtil.valEngineNo(cParam.getLicense().getEngineNo()))
					return;
				sixDeal(cParam);
			}else{
				sixDeal(cParam);
			}	 
		}else{
			return;
		}*/
	}
	/**
	 * 判断参入参数的完整型，要么 全部参数都有，要么缺少就不调用该接口
	 * @param cParam
	 * @return
	 */
	private boolean dealP(CheckCar cParam){
		return CompanyUtil.valTime(cParam.getLicense().getRegisteredTime()) && CompanyUtil.valLicenceNo(cParam.getLicense().getLicenceNo())
				&& CompanyUtil.valEngineNo(cParam.getLicense().getEngineNo());
	}

	/**
	 * 设置每家保险公司的一个车的字段Renewal为true
	 * @param cars
	 */
	private void carCompanyDeal(List<Cars> cars){
		boolean c=false;
		for(Cars cc:cars){

			double newcar=Double.valueOf(cc.getPurchase().trim());//查车接口出来的购置价
			double oldcar=Double.valueOf(carJson.getString("purchase").trim());//续保接口的购置价
			double abs = Math.abs(oldcar-newcar);//做差取绝对值
			li_c.add(abs);//加入到集合里

			if(cc.getModelCode().equals(carJson.getString("modelCode")) && !c){//比对车型编码
				cc.setRenewal("true");
				c=true;
			}else if(cc.getPurchase().equals(carJson.getString("purchase"))&&!c){//比对价格
				cc.setRenewal("true");
				c=true;
			}else{	
				c=false;
				cc.setRenewal("false");
			}
		}

		double maxprice = Double.valueOf(carJson.getString("purchase"))+Collections.min(li_c);//往高的值取

		double minprice = Double.valueOf(carJson.getString("purchase"))-Collections.min(li_c);//往低的值取


		for(Cars cc:cars){
			if(cc.getRenewal().trim().equals("true")){
				break;
			}else{	
				double getprice = Double.valueOf(cc.getPurchase());
				if(getprice == maxprice){
					cc.setRenewal("true");
					break;
				}
				if(minprice == getprice){
					cc.setRenewal("true");
				}
			}
		}

	}

}
